package db.relation;

import java.util.HashMap;
import java.util.Iterator;
import java.util.ArrayList;

import db.BaseDAO;
import db.DAOFactory;
import db.Transaction;
import db.TransformInterface;


import model.*;
import model.relation.ActivitySpots;

/**
 * 
 * Description: 对民俗活动与景点的关系集数据进行处理的DAO。
 * 
 * @since  2009/2/23
 * @author ashen
 * 
 */
public class ActivitySpotsDAO extends BaseDAO implements TransformInterface<ActivitySpots>{
	
	public ActivitySpotsDAO(){
		setTableName("mapscheme.activityspots");
	}
	
	/**
	 * the method save of class ActivitySpotsDAO
	 * 
	 * 该方法将民俗活动与景点的关系记录存储到数据库
	 * 
	 * @param activitySpots 需要保存的ActivitySpots对象
	 * @param transaction 数据库操作类Transaction的对象
	 */
	public void save(ActivitySpots activitySpots,Transaction transaction){
		save(object2HashMap(activitySpots),transaction);
	}
	
	/**
	 * the method delete of class ActivitySpotsDAO
	 * 
	 * 该方法删除民俗活动ID等于参数activityId
	 * 且景点ID等于参数pointId的民俗活动与景点的关系记录
	 * 
	 * @param activityId 民俗活动的ID
	 * @param pointId 景点的ID
	 * @return 返回操作成功与否
	 */
	public boolean delete(int activityId,int pointId){
		return delete("activityId",activityId,"pointId",pointId);
	}
	
	/**
	 * the method delete of class ActivitySpotsDAO
	 * 
	 * 该方法删除民俗活动ID等于参数activityId的民俗活动与景点的关系记录
	 * 
	 * @param activityId 民俗活动的ID
	 * @return 返回操作成功与否
	 */
	public boolean delete(int activityId){
		return delete("activityId",activityId);
	}
	
	/**
	 * the method delete of class ActivitySpotsDAO
	 * 
	 * 该方法删除民俗活动ID等于参数activityId的民俗活动与景点的关系记录
	 * 
	 * @param activityId 民俗活动的ID
	 * @param transaction 数据库操作类Transaction的对象
	 */
	public void delete(int activityId,Transaction transaction){
		delete("activityId",activityId,transaction);
	}
	
	/**
	 * the method findAll of class ActivitySpotsDAO
	 * 
	 * 该方法返回所有民俗活动和景点的关系记录
	 * 
	 * @param transaction 数据库操作类Transaction的对象
	 * @return ArrayList<APSet>类型，返回民俗活动和景点的关系记录
	 */
	public ArrayList<ActivitySpots> findAll(Transaction transaction){
		return list2ObjectList(super.findAllBase(transaction));
	}
	
	/**
	 * the method findByActivityId of class ActivitySpotsDAO
	 * 
	 * 该方法查找与指定ID的民俗活动相关的景点
	 * 
	 * @param id 民俗活动的ID
	 * @param transaction 数据库操作类Transaction的对象
	 * @return ArrayList<Point>类型的结果集合
	 */
	public ArrayList<Spot> findByActivityId(int id,Transaction transaction){
		ArrayList<Spot> resultList =new ArrayList<Spot>();
		ArrayList<ActivitySpots> tempList=
			list2ObjectList(findByProperty("activityId", id,transaction));
		if(tempList.isEmpty())
			return resultList;
		for(Iterator i=tempList.iterator();i.hasNext();){
			resultList.add(((ActivitySpots)i.next()).getSpot());
		}
		return resultList;
	}
	
	/**
	 * the method findByActivityId of class ActivitySpotsDAO
	 * 
	 * 该方法查找与指定ID的民俗活动相关的景点
	 * 
	 * @param id 民俗活动的ID
	 * @return ArrayList<Point>类型的结果集合
	 */
	public ArrayList<Spot> findByActivityId(int id){
		Transaction transaction =new Transaction();
		ArrayList<Spot> resultList =new ArrayList<Spot>();
		ArrayList<ActivitySpots> tempList=
			list2ObjectList(findByProperty("activityId", id,transaction));
		transaction.close();
		if(tempList.isEmpty())
			return resultList;
		for(Iterator i=tempList.iterator();i.hasNext();){
			resultList.add(((ActivitySpots)i.next()).getSpot());
		}
		return resultList;
	}

	/**
	 * the method findById of class ActivitySpotsDAO
	 * 
	 * 该方法查找民俗活动ID等于参数activityId
	 * 且景点ID等于参数pointId的民俗活动与景点的关系记录
	 * 
	 * @param activityId 民俗活动ID
	 * @param pointId 景点ID
	 * @param transaction 数据库操作类Transaction的对象
	 * @return 查询到的民俗活动与景点的关系记录
	 */
	public ActivitySpots findById(int activityId,int pointId,Transaction transaction){	        		 	        
        return hashMap2Object(findByPK("activityId",activityId,"pointId",pointId,transaction));
	}
	
	
	/**
	 * the method list2ObjectList of class ActivitySpotsDAO
	 * 
	 * 该方法将存有民俗活动和景点关系信息的HashMap对象数组转换为ActivitySpots对象数组
	 * 
	 * @param hashMapList HashMap对象数组
	 * @return ActivitySpots对象数组
	 */
	public ArrayList<ActivitySpots> list2ObjectList(ArrayList<HashMap> hashMapList){
		ActivitySpots tempObject=null;
		ArrayList<ActivitySpots> resultList=new ArrayList<ActivitySpots>();
		if(hashMapList.isEmpty())
			return resultList;
		for(Iterator i=hashMapList.iterator();i.hasNext();){
			tempObject=hashMap2Object((HashMap)i.next());
			if(tempObject!=null)
				resultList.add(tempObject);
		}
		return resultList;
	}
	
	/**
	 * the method hashtable2Point of class ActivitySpotsDAO
	 * 
	 * 该方法将HashMap类型的对象转换为ActivitySpots的对象，并返回ActivitySpots的对象.
	 * 
	 * @param hashMap 存储了一个民俗活动与景点关系信息的HashMap类型的对象
	 * @return ActivitySpots的对象.
	 */
	public ActivitySpots hashMap2Object(HashMap hashMap){
		if(hashMap==null)
			return null;
		ActivitySpots apset=new ActivitySpots();
		apset.setActivity((Integer)hashMap.get("ACTIVITYID"));
		Spot spot=DAOFactory.getSpotDAO().findById((Integer)hashMap.get("SPOTID"));
		apset.setSpot(spot);			
		return apset;
	}
	
	/**
	 * the method object2HashMap of class ActivitySpotsDAO
	 * 
	 * 该方法将参数APSet对象转换为存储参数APSet对象信息的HashMap对象，并返回
	 * 
	 * @param apset 民俗活动与景点关系APSet对象
	 * @return 存储参数权限操作APSet对象信息的HashMap对象
	 */
	public HashMap object2HashMap(ActivitySpots apset){
		HashMap hashMap=new HashMap();
		hashMap.put("ACTIVITYID", apset.getActivity());
		hashMap.put("SPOTID", apset.getSpot().getId());
		return hashMap;
	}	

}